package com.projectCommon.util.commonUtil;


import com.projectCommon.bean.Info;

public class StringUtils {
    /**
     * 替换字符串中的括号，将原本的括号替换为（）  全部替换为  ()
     *
     * @param target
     * @return
     */
    public static String replaceParenthesis(String target) {
        if (target == null || target.length() == 0) {
            throw new RuntimeException("传入的数据有问题");
        }
        String replace = target.replace('（', '(');
        return replace.replace("）", ")");
    }

    /**
     * 格式化字符串
     *
     * @param sourceStr   原本的字符串
     * @param sourceWidth 每部分字符串的宽度
     * @return
     */
    public static String formatString(String sourceStr, int[] sourceWidth) {
        double charactersAndLettersScale = divide(49, 30);
        StringBuilder target = new StringBuilder();
        String[] split = sourceStr.split(Info.strSeparation);
        if (split.length != sourceWidth.length) {
            throw new RuntimeException("分割部分和字符宽度不同,重新传递参数");
        }

        for (int i = 0; i < split.length; i++) {
            int chineseCount = getChineseCount(split[i]);
            int chinaSpaceCount = (int) Math.round(chineseCount * charactersAndLettersScale);
            int i1 = chinaSpaceCount - chineseCount;
            int i2 = sourceWidth[i] - i1;
            String format = String.format("%-" + i2 + "s", split[i]);
            target.append(format);
        }
        trimTrailingSpaces(target);
        return target.toString();
    }

    public static double divide(int numerator, int denominator) {
        double value = (double) numerator / denominator;
        long factor = (long) Math.pow(10, 2);
        value = value * factor;
        long tmp = Math.round(value);
        return (double) tmp / factor;
    }

    public static int getChineseCount(String text) {
        int count = 0;
        for (int i = 0; i < text.length(); i++) {
            char ch = text.charAt(i);
            if ('\u4e00' <= ch && ch <= '\u9fff') {
                count++;
            }
        }
        return count;
    }

    private static void trimTrailingSpaces(StringBuilder sb) {
        // 找到最后一个非空格字符的位置
        int index = sb.length() - 1;
        while (index >= 0 && sb.charAt(index) == ' ') {
            index--;
        }
        // 截断StringBuffer
        sb.setLength(index + 1);
    }
    //


    public static int[] conversionStrToArray(String str) {
        return conversionStrToArray(str, ",");
    }

    /**
     * 将一个字符串转换成一个数组，字符串的格式是 : [1,3,4,5,6,7,8,9,10] 也可以是 {1,3,4,5,6,7,8,9,10}
     *
     * @param str 这个字符串
     * @return 返回一个数组
     */
    public static int[] conversionStrToArray(String str, String regex) {
        // 按逗号分割字符串
        String[] stringNumbers = str.split(regex);

        // 创建一个足够大的整数数组
        int[] intArray = new int[stringNumbers.length];

        // 将字符串转换为整数并填充数组
        for (int i = 0; i < stringNumbers.length; i++) {
            intArray[i] = Integer.parseInt(stringNumbers[i].trim());
        }

        return intArray;
    }

    /**
     * 检查数组中是否存在指定的数字。
     *
     * @param array  被搜索的整数数组。
     * @param number 要搜索的整数。
     * @return 如果数组中包含该数字则返回true，否则返回false。
     */
    public static boolean containsNumber(int[] array, int number) {
        for (int element : array) {
            if (element == number) {
                return true;
            }
        }
        return false;
    }

}

